﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Script.Serialization;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;
using COMPONENT.BL;
using COMPONENT.Entity;
using COMPONENT.Library.General;
using HMS.PresentationWeb.src.app_code;

namespace HMS.PresentationWeb.privado
{
    public partial class gestionarclienteguardar : System.Web.UI.Page
    {
        public Int32 vsId
        {
            get { return ViewState["ID"] != null ? (Int32)ViewState["ID"] : default(Int32); }
            set { ViewState["ID"] = value; }
        }
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                SetQuery();
                SetData();
                LoadDDLCard();
            }
        }
        public void SetData()
        {
            if (vsId > 0)
            {
                clsUsuario obj = null;
                obj = clsReglaNegocio.Instancia.ListarxID_Clientes(vsId);
                if (obj != null)
                    SetControls(obj);
                else
                    GoBack();
              
            }
        }

        private void SetControls(clsUsuario obj)
        {
            
            if (obj != null)
            {
                txtApellidos.Text = obj.Apellidos.ToString();
                clsTarjeta objTarj = clsReglaNegocio.Instancia.ListarXId_Tarjeta(obj.Tarjeta.ID);
                if (objTarj != null)
                {
                    objTarj.NumTarjeta = clsSeguridad.Desencriptar(objTarj.NumTarjeta);
                    ddlTarjeta.Items.Add(new ListItem { Value = obj.Tarjeta.ID.ToString(), Text = objTarj.TipoTarjeta + " *****"+ ((objTarj.NumTarjeta.Length>8)?objTarj.NumTarjeta.Substring(objTarj.NumTarjeta.Length - 4):"") });
                }
                txtDNI.Text = obj.DNI.ToString();
                txtEmail.Text = obj.Email.ToString();
                txtFecReg.Text = obj.FechaCreacion.ToString("MM/dd/yyyy");
                txtFeNac.Text = obj.FechaNacimiento.ToString("MM/dd/yyyy");
                txtNombres.Text = obj.Nombre.ToString();
                txtRUC.Text = obj.RUC.ToString();
                if (obj.Genero == 0)
                {
                    rbMasculino.Checked = true;

                }
                else { rbFemenino.Checked = false; }
                chkEstado.Checked = obj.Estado ? true : false;
            }
            
        }
        private void SetQuery()
        {
            if (!String.IsNullOrEmpty(Request.QueryString["q"]))
            {
                String id = clsSeguridad.Desencriptar(Request.QueryString["q"]);
                if (id != String.Empty)
                    vsId = Convert.ToInt32(id);
                else
                    GoBack();
            }
        }
        private void LoadDDLCard()
        {
            InsertDDLCard(this.ddlTipoTarjeta);
            for (int i = 0; i <= 10; i++)
            {
                String Year = String.Format("{0}", (DateTime.Now.Year + i));
                ddlAnioExp.Items.Add(new ListItem(Year, Year));
            }
        }
        private void InsertDDLCard(DropDownList ddl)
        {
            ddl.Items.Add(new ListItem("Visa"));
            ddl.Items.Add(new ListItem("MasterCard"));
            ddl.Items.Add(new ListItem("AmericanExpress"));
            ddl.Items.Add(new ListItem("Discover"));
            ddl.Items.Add(new ListItem("Diners"));
            ddl.DataBind();
        }
        private void GoBack()
        {
            Response.Redirect("/privado/GestionarCliente.aspx");
        }
        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            String Message = String.Empty;
            Boolean success = false;
            try
            {
                clsUsuario usuario = new clsUsuario();
                if (Request.QueryString["q"] != null)
                {
                    usuario.ID = Convert.ToInt32(clsSeguridad.Desencriptar(Request.QueryString["q"]));

                }
                usuario.Nombre = txtNombres.Text;
                usuario.Apellidos = txtApellidos.Text;
                usuario.DNI = txtDNI.Text;
                usuario.RUC = txtRUC.Text;
                if (BaseSession.vsTarjeta != null)
                {
                    usuario.Tarjeta = BaseSession.vsTarjeta;
                    if (rbFemenino.Checked) { usuario.Genero = 1; }
                    else { usuario.Genero = 0; }
                    usuario.Email = txtEmail.Text;
                    usuario.FechaNacimiento = DateTime.ParseExact(this.txtFeNac.Text, "d", CultureInfo.InvariantCulture);
                    if (txtFecReg.Text != "")
                    {
                        usuario.FechaCreacion = DateTime.ParseExact(this.txtFecReg.Text, "d", CultureInfo.InvariantCulture);
                    }
                    else { usuario.FechaCreacion = DateTime.Today; }
                    usuario.Estado = true;
                    usuario.Creadopor = 99;
                    success = clsReglaNegocio.Instancia.Registrar_Cliente(usuario);
                    if (!success)
                    {
                        Message = "Error al Guardar";
                    }
                    else { Message = "Guardado Existoso"; }
                }
                else
                {
                    Message = "Ingrese Tarjeta";
                }

            }
            catch (Exception)
            {
                Response.Write("<script type='text/javascript'>alert('" + Message + "');</script>");
            }
            finally {
                Response.Write("<script type='text/javascript'>alert('" + Message + "');</script>");
                Response.Redirect("/privado/GestionarCliente.aspx");
            }
        }
        [WebMethod]
        public static srTarjeta buscartarjeta(String id)
        {
            clsTarjeta objCard = null;
            srTarjeta view = new srTarjeta();
            try
            {
                if (id != "")
                {
                    BaseEntity entity = new BaseEntity();
                    objCard = new clsTarjeta();
                    JavaScriptSerializer sr = new JavaScriptSerializer();
                    view.Id = sr.Deserialize<String>(id);
                    Int32 IdCard = Convert.ToInt32(view.Id) != 0 ? Convert.ToInt32(view.Id) : 0;
                    objCard = clsReglaNegocio.Instancia.ListarXId_Tarjeta(IdCard);
                    if (objCard != null)
                    {
                        view.Id = objCard.ID.ToString();
                        view.TipoTarjeta = objCard.TipoTarjeta.ToString();
                        view.NombreCuenta = objCard.NombreCuenta.ToString();
                        view.NumeroTarjeta = clsSeguridad.Desencriptar(objCard.NumTarjeta.ToString());
                        view.ExpMes = objCard.MesExp.ToString();
                        view.ExpAnio = objCard.AñoExp.ToString();
                        view.CodSeg = objCard.CodigoSeguridad.ToString();
                    }

                }
            }
            catch (Exception)
            {
                view.TipoTarjeta = "false";
            }
            return view;

        }
        [WebMethod]
        public static srTarjeta GuardarTarjeta(String data)
        {
           // bool isCorrect = false;
            clsTarjeta objCard = null;
            srTarjeta view = null;

            try
            {
                if (data != "")
                {
                    BaseEntity entity = new BaseEntity();
                    objCard = new clsTarjeta();
                    JavaScriptSerializer serializer = new JavaScriptSerializer();
                    view = serializer.Deserialize<srTarjeta>(data);

                    string ccRegEx = @"^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$";
                    Regex r = new Regex(ccRegEx, RegexOptions.IgnoreCase);
                    Match m = r.Match(view.NumeroTarjeta);

                    if (m.Success)
                    {
                        objCard.ID = Convert.ToInt32(view.Id == "" ? "0" : view.Id) != 0 ? Convert.ToInt32(view.Id) : 0;
                        objCard.TipoTarjeta = view.TipoTarjeta;
                        objCard.NombreCuenta = view.NombreCuenta;
                        objCard.NumTarjeta = clsSeguridad.Encriptar(view.NumeroTarjeta);
                        objCard.MesExp = Convert.ToInt32(view.ExpMes);
                        objCard.AñoExp = Convert.ToInt32(view.ExpAnio);
                        objCard.CodigoSeguridad = Convert.ToInt32(view.CodSeg);
                        //objCard.Last4 = Convert.ToInt32(view.Cardnumber.Substring(view.Cardnumber.Length - 4, 4));
                        Int32 res = 0;
                        if (Int32.TryParse(view.Cliente == "null" ? "0" : view.Cliente, out res))
                            objCard.idCliente = res;
                        else
                            objCard.idCliente = Convert.ToInt32(clsSeguridad.Desencriptar(view.Cliente.ToString()));
                        //isCorrect = xLogic.Instance.Card_Insert(ref entity, ref objCard);
                        //view.Id = objCard.ID.ToString();
                        BaseSession.vsTarjeta = objCard;
                        view.CodSeg = "true";
                    }
                    else
                    {
                        view.CodSeg = "false";
                    }

                }
            }
            catch (Exception)
            {
                view.CodSeg = "An error ocurred while saving.";
            }
            return view;
        }

        [Serializable]
        public class srTarjeta {
            public String Id { get; set; }
            public String TipoTarjeta { get; set; }
            public String NombreCuenta { get; set; }
            public String NumeroTarjeta { get; set; }
            public String CodSeg { get; set; }
            public String ExpMes { get; set; }
            public String ExpAnio { get; set; }
            public String Cliente { get; set; }
        }

    }
}